// api/auth.js - 认证相关接口
import { post, get } from './request.js';
import { setToken, setUserInfo, removeToken, removeUserInfo } from '../utils/storage.js';

// 微信登录
export const wxLogin = async (code) => {
  try {
    const result = await post('/auth/wxlogin', { code });
    // 保存token和用户信息
    if (result.data?.token && result.data?.userInfo) {
      setToken(result.data.token);
      setUserInfo(result.data.userInfo);
    }
    return result;
  } catch (error) {
    console.error('微信登录失败:', error);
    throw error;
  }
};

// 刷新Token
export const refreshToken = async () => {
  try {
    const result = await post('/auth/refresh');
    if (result.data?.token) {
      setToken(result.data.token);
    }
    return result;
  } catch (error) {
    console.error('Token刷新失败:', error);
    // Token刷新失败，清除本地存储并返回登录页
    logout();
    throw error;
  }
};

// 退出登录
export const logout = () => {
  removeToken();
  removeUserInfo();
  // 可以在这里添加其他清理操作
};

// 获取登录状态
export const getLoginStatus = async () => {
  try {
    const result = await get('/auth/status');
    return result;
  } catch (error) {
    console.error('获取登录状态失败:', error);
    return { data: { isLoggedIn: false } };
  }
};

// 获取用户信息
export const getUserInfo = async () => {
  try {
    const result = await get('/user/info');
    // 更新本地用户信息
    if (result.data?.userInfo) {
      setUserInfo(result.data.userInfo);
    }
    return result;
  } catch (error) {
    console.error('获取用户信息失败:', error);
    throw error;
  }
};

// 绑定手机号
export const bindPhone = async (encryptedData, iv) => {
  try {
    const result = await post('/auth/bindphone', { encryptedData, iv });
    // 更新用户信息
    if (result.data?.userInfo) {
      setUserInfo(result.data.userInfo);
    }
    return result;
  } catch (error) {
    console.error('手机号绑定失败:', error);
    throw error;
  }
};

// 获取微信用户信息（需要用户授权）
export const getWxUserInfo = async () => {
  try {
    // 调用微信API获取用户信息
    const userProfile = await uni.getUserProfile({
      desc: '用于完善会员资料',
      lang: 'zh_CN'
    });
    
    // 同步用户信息到后端
    const result = await post('/auth/updateuser', {
      userInfo: userProfile.userInfo
    });
    
    // 更新本地用户信息
    if (result.data?.userInfo) {
      setUserInfo(result.data.userInfo);
    }
    
    return result;
  } catch (error) {
    console.error('获取微信用户信息失败:', error);
    throw error;
  }
};

// 静默登录（适用于H5环境）
export const silentLogin = async () => {
  try {
    // 在H5环境下，可能需要重定向到微信授权页面
    // 这里只是示例，具体实现需要根据后端接口设计来调整
    const result = await get('/auth/silentlogin');
    
    // 如果需要跳转到授权页面
    if (result.data?.authUrl) {
      window.location.href = result.data.authUrl;
      return null;
    }
    
    // 保存token和用户信息
    if (result.data?.token && result.data?.userInfo) {
      setToken(result.data.token);
      setUserInfo(result.data.userInfo);
    }
    
    return result;
  } catch (error) {
    console.error('静默登录失败:', error);
    throw error;
  }
};